Release 10.1A: OpenEdge Development:
Programming Interfaces


Reading and writing an XML document simultaneously

In this next example, the SAX-reader object is used to read in an XML document and the internal callback procedures immediately use a SAX-writer object to output the XML document to a different destination.

sax-readwrite.p 
/* This sample uses both the SAX-READER and the SAX-WRITER  
   objects. The SAX-READER is used to read in the .XML file  
   and the SAX-WRITER writes the data out to a new .XML file */ 
DEFINE VARIABLE hSAXWriter AS HANDLE NO-UNDO. 
DEFINE VARIABLE hSAXReader AS HANDLE NO-UNDO. 
CREATE SAX-WRITER hSAXWriter. 
hSAXWriter:FORMATTED = TRUE. 
hSAXWriter:STANDALONE = "yes". 
hSAXWriter:ENCODING = "UTF-8". 
hSAXWriter:SET-OUTPUT-DESTINATION("file", "sax-readwrite.xml"). 
hSAXWriter:START-DOCUMENT(). 
CREATE SAX-READER hSAXReader. 
hSAXReader:SET-INPUT-SOURCE("FILE", "sampledata.xml"). 
hSAXReader:SAX-PARSE(). 
hSAXWriter:END-DOCUMENT(). 
DELETE OBJECT hSAXWriter. 
DELETE OBJECT hSAXReader. 

/***********************************************/ 
/*         callbacks for SAX parser            */ 
/***********************************************/ 
PROCEDURE StartElement: 
DEFINE INPUT PARAMETER namespaceURI AS CHARACTER. 
DEFINE INPUT PARAMETER localName AS CHARACTER. 
DEFINE INPUT PARAMETER qname AS CHARACTER. 
DEFINE INPUT PARAMETER hAttributes AS HANDLE. 
DEFINE VARIABLE i AS INTEGER. 
hSAXWriter:START-ELEMENT(localName, namespaceURI). 
IF hattributes:NUM-ITEMS > 0 THEN 
    DO i = 1 TO hattributes:NUM-ITEMS: 
        hSAXWriter:INSERT-ATTRIBUTE(hattributes:GET-QNAME-BY-INDEX(i),  
                                    hattributes:GET-VALUE-BY-INDEX(i)). 
    END. 
END. 
PROCEDURE Characters: 
DEFINE INPUT PARAMETER charData AS MEMPTR. 
DEFINE INPUT PARAMETER numChars AS INTEGER. 
DEFINE VARIABLE data AS CHARACTER NO-UNDO. 
data = GET-STRING(charData, 1, GET-SIZE(charData)). 
hSAXWriter:WRITE-CHARACTERS(data). 
END. 
PROCEDURE EndElement: 
DEFINE INPUT PARAMETER namespaceURI AS CHARACTER. 
DEFINE INPUT PARAMETER localName AS CHARACTER. 
DEFINE INPUT PARAMETER qName AS CHARACTER. 
hSAXWriter:END-ELEMENT(localName, namespaceURI). 
END. 


Copyright © 2005 Progress Software Corporation
www.progress.com
Voice: (781) 280-4000
Fax: (781) 280-4095